package com.knowledgegraph.neo4j.service;

import com.knowledgegraph.neo4j.entity.GraphEntity;

import java.util.List;
import java.util.Map;

/**
 * Neo4j 实体服务接口
 */
public interface Neo4jEntityService {
    
    /**
     * 创建实体
     */
    GraphEntity createEntity(GraphEntity entity);
    
    /**
     * 更新实体
     */
    GraphEntity updateEntity(GraphEntity entity);
    
    /**
     * 删除实体
     */
    void deleteEntity(Long entityId);
    
    /**
     * 根据ID查询实体
     */
    GraphEntity findById(Long entityId);
    
    /**
     * 根据知识图谱ID查询实体列表
     */
    List<GraphEntity> findByGraphId(Long graphId);
    
    /**
     * 根据类型查询实体
     */
    List<GraphEntity> findByType(String type);
    
    /**
     * 搜索实体
     */
    List<GraphEntity> searchEntities(Long graphId, String keyword);
    
    /**
     * 获取实体统计信息
     */
    Map<String, Object> getEntityStatistics(Long graphId);
    
    /**
     * 获取实体类型分布
     */
    List<Map<String, Object>> getEntityTypeDistribution(Long graphId);
    
    /**
     * 查询实体及其关系
     */
    Map<String, Object> getEntityWithRelations(Long entityId);
    
    /**
     * 查询实体的邻居节点
     */
    List<Map<String, Object>> getEntityNeighbors(Long entityId);
    
    /**
     * 查询重要实体（根据度数）
     */
    List<Map<String, Object>> getImportantEntities(Long graphId, Integer limit);
    
    /**
     * 批量创建实体
     */
    List<GraphEntity> batchCreateEntities(List<GraphEntity> entities);
    
    /**
     * 根据知识图谱ID和类型查询实体
     */
    List<GraphEntity> findByGraphIdAndType(Long graphId, String type);
}